package com.dc.designPattern._7_decorator.impl;

/**
 * Description: 装饰者模式_装饰者类抽象类
 * @author: gdc
 * @date: 2021/3/14
 * @version 1.0
 */
public abstract class Decorator extends Drink {

    /**
     * 组合了 被装饰类
     */
    private Drink drink;

    public Decorator(Drink drink) {
        this.drink = drink;
    }

    /**
     * 计算方法使用递归的方式进行计算
     */
    @Override
    public float cost() {
        // 装饰者的价格 + 被装饰者的价格
        return getPrice() + drink.cost();
    }

    @Override
    public String getDes() {
        // 装饰者描述 + 装饰者价格 + 被装饰者描述
        return super.getDes() + "\t" + getPrice() + "\t||\t" + drink.getDes();
    }
}
